package com.example.cmh.service;

import com.example.cmh.pojo.User;
import com.example.cmh.vo.UserVO;

import java.util.Map;

/**
 * 用户服务接口
 */
public interface UserService {
    
    /**
     * 分页条件搜索用户信息
     * @param page 页码
     * @param size 每页大小
     * @param userName 用户名
     * @param userPhone 用户电话
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param userStatus 用户状态
     * @return 分页结果
     */
    Map<String, Object> getUsers(Integer page, Integer size, String userName, String userPhone, String startTime, String endTime, String userStatus);
    
    /**
     * 根据userId搜索用户信息
     * @param page 页码
     * @param size 每页大小
     * @param userId 用户ID
     * @return 分页结果
     */
    Map<String, Object> getUsersByUserId(Integer page, Integer size, Integer userId);
    
    /**
     * 根据部门搜索用户信息
     * @param page 页码
     * @param size 每页大小
     * @param departmentId 部门ID
     * @return 分页结果
     */
    Map<String, Object> getUsersByDepartmentId(Integer page, Integer size, Integer departmentId);
    
    /**
     * 新增用户
     * @param user 用户信息
     */
    void addUsers(User user);
    
    /**
     * 更新用户信息
     * @param user 用户信息
     */
    void updateUser(User user);
    
    /**
     * 删除用户
     * @param userId 用户ID
     */
    void deleteUser(Integer userId);
    
    /**
     * 用户登录
     * @param loginRequest 登录请求
     * @return 用户信息
     */
    UserVO login(Map<String, String> loginRequest);
    
    /**
     * 用户登出
     * @param userId 用户ID
     */
    void logout(Integer userId);
    
    /**
     * 根据多个部门ID分页查询用户信息
     * @param page 页码
     * @param size 每页大小
     * @param departmentIds 部门ID集合
     * @return 分页结果
     */
    java.util.Map<String, Object> getUsersByDepartmentIds(Integer page, Integer size, java.util.List<Integer> departmentIds);
    
    /**
     * 用户修改自己的信息
     * @param userId 用户ID
     * @param user 用户信息（只需包含要修改的字段）
     * @return 更新后的用户信息
     */
    User updateOwnUser(Integer userId, User user);
    
    /**
     * 用户修改密码
     * @param userId 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    void updatePassword(Integer userId, String oldPassword, String newPassword);
    
    /**
     * 根据用户名获取用户
     */
    User getUserByName(String userName);
} 